草庐IT

Java BufferedImage 内存消耗

全部标签

c++ - 为什么这个C++程序会导致内存泄漏?

考虑以下代码:char*str1=newchar[30];char*str2=newchar[40];strcpy(str1,"Memoryleak");str2=str1;delete[]str2;delete[]str1;为什么上面的程序会导致内存泄漏?我该如何避免这种情况? 最佳答案 以上不仅会导致内存泄漏,还会导致内存泄漏。它会导致未定义的行为,这要糟糕得多。问题出在最后三行:str2=str1;delete[]str2;delete[]str1;如果我们忽略第一行,那么最后两行会正确回收此函数中分配的所有内存。但是,第一行

c++ - 我可以使用 block 来管理 C++ 中的内存消耗吗?

我试图在C++程序中节省一些内存,我想知道我是否可以使用block作为变量的范围(如在Perl中)。假设我有一个执行一些计算并给出结果的巨大对象,这样做是否有意义:InputTypeinput;ResultTyperesult;{//BlockofcodeMyHugeObjectmho;result=mho.superHeavyProcessing();}/*Myothercode...*/我可以期望对象在退出block时被销毁吗? 最佳答案 是的,你可以。一旦变量超出范围,析构函数就会被调用,它应该释放堆分配的内存。

c++ - VC++中未初始化的内存块

众所周知,VisualC++运行时使用特殊的非零标记标记未初始化或刚刚释放的内存块。有没有办法完全禁用此行为而无需手动将所有未初始化的内存设置为零?由于0xFEEEFEEE!=0,这对我的有效非空检查造成了严重破坏。嗯,也许我应该解释得更好一点。我创建并初始化了一个变量(通过new),一切顺利。当我释放它(通过删除)时,它将指针设置为0xFEEEFEEE而不是NULL。当我插入对NULL的正确检查时,就像所有管理自己内存的好程序一样,我遇到了问题,因为0xFEEEFEEE传递了一个NULL检查没有问题。除了在删除它们时手动将所有指针设置为NULL之外,还有什么好方法可以检测内存何时已被

c++ - mudflap 在使用 new() 运算符分配内存时抛出核心转储

这是我的代码片段。intmain(){int*var=newint(6);cout当使用mudflapas编译时$exportMUDFLAP_OPTIONS="-print-leaks-mode-check"$g++test.cpp-fmudflap-lmudflap$./a.outSegmentationfault(coredumped)但是在没有mudflap选项的情况下编译时它不会抛出核心转储。我是mudflap的新手。请告诉我是否以错误的方式使用挡泥板。仅供引用:$uname-aLinuxlocalhost.localdomain2.6.18-308.4.1.el5#1SMPW

c++ - 多重虚拟继承中的虚拟表和内存布局

考虑以下层次结构:structA{inta;A(){f(0);}A(inti){f(i);}virtualvoidf(inti){coutC实例的确切内存布局是什么?它包含多少个vptr,每个vptr的确切位置?哪些虚表与C的虚表共享?每个虚拟表到底包含什么?这里是我对布局的理解:----------------------------------------------------------------|vptr1|AptrOfB1|b1|B2ptr|c|vptr2|AptrOfB2|b2|a|--------------------------------------------

c++ - 是否允许编译器优化堆内存分配?

考虑以下使用new的简单代码(我知道没有delete[],但它不属于这个问题):intmain(){int*mem=newint[100];return0;}是否允许编译器优化new调用?在我的研究中,g++(5.2.0)和VisualStudio2015不优化new调用,whileclang(3.0+)does.所有测试都是在启用完全优化的情况下进行的(-O3用于g++和clang,用于VisualStudio的Release模式)。new不是在幕后进行系统调用,使得编译器不可能(并且非法)对其进行优化吗?编辑:我现在已经从程序中排除了未定义的行为:#includeintmain()

C++ 试图用 OpenGL 绘制大图像时内存不足

我使用MFC和OpenGL在C++中创建了一个简单的2D图像查看器。此图像查看器允许用户打开图像、放大/缩小、平移以及查看不同颜色层(青色、黄色、品红色、黑色)的图像。该程序非常适合大小合理的图像。但是,我正在对一些非常大的图像进行压力测试,并且很容易耗尽内存。我拥有的一张这样的图片是16,700x15,700。我的程序甚至在绘制任何东西之前就会耗尽内存,因为我正在动态创建一个大小为heightxwidthx4的UCHAR[]。我将它乘以4,因为当我将该数组提供给glTexImage2D(GLTEXTURE_2D,0,GL_RGB8,width,height,0,GL_RGBA,GLU

c++ - Boost、共享内存和 vector

我需要在进程之间共享一堆字符串(将来可能是更复杂的对象)。我决定使用boost::interprocess但我无法让它工作。我敢肯定这是因为我不明白的东西。我以他们为榜样,但如果有使用该库经验的人可以查看我的代码并告诉我哪里出了问题,我将不胜感激。问题是它似乎有效,但经过几次迭代后,我在读取器进程和有时在写入器进程上都遇到了各种异常。这是我的实现的简化版本:usingnamespaceboost::interprocess;classSharedMemoryWrapper{public:SharedMemoryWrapper(conststd::string&name,boolserv

c++ - 如何优化间接基数排序? (又名如何优化不可预测的内存访问模式)

我用C++编写了一个间接基数排序算法(间接,我的意思是它返回项目的索引):#include#include#includetemplatevoidradix_ipass(It1begin,It1constend,It2consta,size_tconsti,std::vector>&buckets){size_tncleared=0;for(It1j=begin;j!=end;++j){size_tconstk=a[*j][i];while(k>=ncleared&&ncleared=buckets.size()){buckets.resize(k+1);ncleared=bucket

c++ - 将 "Out of Memory"错误写入文件,没有内存?

如果程序内存不足,我想记录并可能警告用户,让他们有机会尝试释放一些内存(希望如此)。虽然我可以预先分配显示情况所需的必要GUI实体,但我担心的是,在这种情况下可能无法使用cstdio进行更多基本操作,例如打开或写入文件。我的问题是,如果一个程序根本不能再动态分配内存,是否仍然可以使用cstdio?是否需要采取任何特殊措施,例如预先打开文件或将其设置为不使用缓冲区?cstring函数仍然可以运行吗?在这种情况下还有其他可能需要了解的障碍吗?(在这种情况下警告用户是一种奢侈,主要目的是将错误记录到文件中,然后尝试使用cstdio挽救相关数据,然后按此顺序警告用户)